/**
 * @description 范围内的随机数
 * @param {number} max
 * @param {number} min
 * @returns {number}
 */
function random(max, min) {
  const minCeiled = Math.ceil(min);
  const maxFloored = Math.floor(max);
  return Math.floor(Math.random() * (maxFloored - minCeiled + 1) + minCeiled);
}

/**
 * @description 两个矩形区域是否相交
 * @param {Shape} shape1
 * @param {Shape} shape2
 * @returns {boolean}
 */
function isIntersecting(shape1, shape2) {
  return !(
    (
      shape1.x + shape1.width <= shape2.x || // A 在 B 左边
      shape1.x >= shape2.x + shape2.width || // A 在 B 右边
      shape1.y + shape1.height <= shape2.y || // A 在 B 上方
      shape1.y >= shape2.y + shape2.height
    ) // A 在 B 下方
  );
}

/**
 * 将以画布左上角为原点的点坐标转换为以画布中心点为原点的坐标
 * @param {number} w canvas.width
 * @param {number} h canvas.height
 * @param {number} x shape.x
 * @param {number} y shape.y
 */
function convertCoordinateSystem(w, h, x, y) {
  const offsetX = -(w / 2);
  const offsetY = -(h / 2);
  return {
    x: x - offsetX,
    y: y - offsetY,
  };
}

/**
 *
 * @param {number} w
 * @param {number} h
 * @param {number} x
 * @param {number} y
 */
function offsetShapeCenter(w, h, x, y) {
  return {
    x: x - w / 2,
    y: y - h / 2,
  };
}
